import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.TreeMap;

public class Solution632 {
    public int[] smallestRange(List<List<Integer>> nums) {
        TreeMap<Integer,List<Integer>> map=new TreeMap<>();
        int[] point=new int[nums.size()];
        for (int i=0;i<nums.size();i++) {
            List<Integer> num=nums.get(i);
            map.putIfAbsent(num.get(0),new ArrayList<>());
            map.get(num.get(0)).add(i);
        }
        int min=Integer.MAX_VALUE;
        int[] ans = new int[0];
        while (true){
            int a=map.firstKey();
            int b=map.lastKey();
            if (b-a<min){
                min=b-a;
                ans=new int[]{a,b};
            }
            List<Integer> list=map.get(a);
            int m=list.get(0);
            if (point[m]==nums.get(m).size()-1){
                break;
            }else{
                list.remove(0);
                if (list.isEmpty()){
                    map.remove(a);
                }
                point[m]++;
                map.putIfAbsent(nums.get(m).get(point[m]),new ArrayList<>());
                map.get(nums.get(m).get(point[m])).add(m);
            }
        }
        return ans;
    }

    public static void main(String[] args) {
        List<List<Integer>> lists=new ArrayList<>();
        lists.add(Arrays.asList(4,10,15,24,26));
        lists.add(Arrays.asList(0,9,12,20));
        lists.add(Arrays.asList(5,18,22,30));
        System.out.println(Arrays.toString(new Solution632().smallestRange(lists)));
    }
}
